import { levelQueryApi, queryDictionaryApi } from "../../api/tournament"
import store from "../../utils/store";
const keyCodes = ['SWIMMING_CATEGORY', 'SWIMMING_POOL']
console.log(store.state.baseData)
Page({

  /**
   * 页面的初始数据
   */
  data: {
    projectValue: '',
    poolValue: '',
    projectOptions: [],
    poolOptions: [],
    sexOptions: [
      { text: '男', value: 'MAN' },
      { text: '女', value: 'GIRL' },
    ],
    sexValue: store.state.baseData.sex,
    time: '', // 用户输入的时间
    // timeError: '', // 时间输入错误提示
    currentLevel: '无等级', // 当前等级
    nextLevelTime: '00:00:00', // 距离下一等级时间
    showTimePicker: false, // 时间选择器显示控制
  },

  // 项目下拉选择变化
  onProjectChange(e) {
    this.setData({ projectValue: e.detail })
  },
  dicChange(e) {
    const {key, type} = e.target.dataset
    const updateData = {
      [key]: e.detail
    }
    this.setData(updateData)
  },
  // 时间输入框输入（手动输入场景）
  onTimeInput(e) {
    this.setData({
      time: e.detail,
      // timeError: ''
    });
  },

  // 表单验证
  validateForm() {
    let { time } = this.data;
  
    // 1. 检查时间是否为空
    if (!time) {
      wx.showToast({
        title: '请输入时间',
        icon: 'none'
      });
      return false;
    }
  
    // 3. 检查时间格式是否正确 (例如: 28.36, 28.00)
    const timeRegex = /^(?:\d+:\d{1,2}\.\d{2}|\d+\.\d{2})$/;
    if (!timeRegex.test(time)) {
      wx.showToast({
        title: '时间格式错误，请输入类似 00:00.00 或 00.00 的格式',
        icon: 'none'
      });
      return false;
    }
    
    // 4. 检查时间是否为正数
    if (parseFloat(time) <= 0) {
      wx.showToast({
        title: '时间必须大于 0',
        icon: 'none'
      });
      return false;
    }
  
    return true;
  },

  // 查看等级按钮点击
  async checkLevel() {
    if (!this.validateForm()) return

    try {
      const res = await levelQueryApi({
        project: this.data.projectValue,
        distance: this.data.poolValue,
        sex: this.data.sexValue,
        startTime: this.data.time
      })
      if (res.code === 0) {
        const data = res.data || {}
        this.setData({
          currentLevel: data.level || '无等级',
          nextLevelTime: data.time || '00:00:00'
        })
      } else {
        wx.showToast({ title: res.message || '查询失败', icon: 'none' })
      }
    } catch (error) {
      console.error('等级查询失败', error)
      wx.showToast({ title: '网络异常', icon: 'none' })
    }
  },
  // 获取字典数据
  async getDictionary(keyCode) {
    const dicRes = await queryDictionaryApi(keyCode)
    if (dicRes.code === 0) {
      const transformedData = dicRes.data.map(item => ({
        value: item.valueCode,
        text: item.valueName
      }))
      if (keyCode === keyCodes[0]) {
        this.setData({
          projectOptions: transformedData,
          projectValue: transformedData[0]?.value || ''
        })
      } else {
        this.setData({
          poolOptions: transformedData,
          poolValue: transformedData[0]?.value || ''
        })
      }
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    Promise.all([
      this.getDictionary(keyCodes[0]), // 加载项目字典
      this.getDictionary(keyCodes[1])  // 加载泳池距离字典
    ]).then(() => {
      // 字典加载完成后可执行初始化操作
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {}
})